package app

import (
    "os"
    "gitee.com/zwx784533/zwx2018/config"
    "time"
    "log"
    "fmt"
)

// 日志等级
type LogLevel string

const (
    LOG_LEVEL_INFO LogLevel = "info"
    LOG_LEVEL_WARNING LogLevel = "warning"
    LOG_LEVEL_ERROR LogLevel = "error"
)

// 记录日志
// level 日志等级
// msg 日志内容
func Log(level LogLevel, msg ...interface{} )  {
    // 创建目录
    dir := config.ServerConf.LogDir+string(level)
    _, err := mkdir(dir)
    if err != nil {
        panic(err)
    }
    // 打开日志文件，按日期创建新文件
    fileName := time.Now().Format("2006-01-02")+".log"
    file, err := os.OpenFile(dir+"/"+fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    defer file.Close()
    if err != nil {
        panic(err)
    }
    // 设置输出流为日志文件
    log.SetOutput(file)
    log.SetPrefix(fmt.Sprintf("[%s]", string(level)))
    log.SetFlags(log.Ldate | log.Ltime)
    log.Println(msg...)
}

// 记录 info 级别的日志
func Info(msg ...interface{})  {
    Log(LOG_LEVEL_INFO, msg...)
}

// 记录 error 级别的日志
func Error(msg ...interface{})  {
    Log(LOG_LEVEL_ERROR, msg...)
}

// 创建目录
func mkdir(dir string) (bool, error)  {
    _, err := os.Stat(dir)

    if err == nil {
        return true, nil
    }

    err = os.MkdirAll(dir, 0755)

    if err != nil {
        return false, err
    }
    return  true, nil
}
